package com.seecen.utils;

import cn.hutool.core.util.ObjectUtil;
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

/**
 * 安全上下文工具类
 * 用于获取当前登录用户信息
 */
public class SecurityContextUtil {

    /**
     * 从请求头中获取token并解析出用户ID
     * @return 用户ID，如果未登录或token无效则返回null
     */
    public static Long getCurrentUserId() {
        try {
            // 获取当前请求
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            if (attributes == null) {
                return null;
            }

            HttpServletRequest request = attributes.getRequest();
            String token = request.getHeader("token");

            if (ObjectUtil.isEmpty(token)) {
                return null;
            }

            // 这里需要注入JwtHelper，但由于是静态工具类，不能直接注入
            // 我们使用SpringContextUtil来获取Bean
            JwtHelper jwtHelper = SpringContextUtil.getBean(JwtHelper.class);
            if (jwtHelper == null) {
                return null;
            }

            // 验证token是否过期
            boolean isExpiration = jwtHelper.isExpiration(token);
            if (isExpiration) {
                return null;
            }

            // 解析token获取用户ID
            return jwtHelper.getUserId(token);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}
